package com.answer.service;

import com.answer.entity.ScoringResult;
import com.answer.model.dto.scoringResult.ScoringResultQueryRequest;
import com.answer.model.vo.ScoringResultVO;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;

/**
 * 评分结果服务
 */
public interface ScoringResultService extends IService<ScoringResult> {

    /**
     * 校验数据
     * 此方法用于对生成的评分结果进行校验，确保数据的准确性和一致性
     * 它通过对特定条件的检查，来确保评分结果符合预期的业务规则
     *
     * @param scoringResult 评分结果对象，包含需要校验的所有数据
     * @param add           标志位，指示是否是对创建的数据进行校验
     *                      true表示是新创建的数据，false表示是更新的数据
     */
    void validScoringResult(ScoringResult scoringResult, boolean add);


    /**
     * 获取查询条件
     * 此方法用于根据用户的查询请求构建一个查询包装器，以便对评分结果进行灵活的查询和筛选
     * 使用QueryWrapper可以实现对数据表的复杂查询，包括但不限于条件查询，排序等
     *
     * @param scoringResultQueryRequest 用户的查询请求对象，包含了用户设定的查询条件
     * @return 返回一个QueryWrapper对象，用于数据库查询操作它根据用户提供的查询条件构建查询逻辑
     */
    QueryWrapper<ScoringResult> getQueryWrapper(ScoringResultQueryRequest scoringResultQueryRequest);


    /**
     * 获取评分结果封装
     * 此方法的目的是将评分结果和请求信息封装到一个视图对象中，以便于前端展示和操作
     * 它解释了评分结果的具体内容以及请求的上下文信息，确保了数据的完整性和一致性
     *
     * @param scoringResult 评分结果对象，包含评分逻辑处理后的数据
     * @return 返回一个ScoringResultVO对象，其中包含了封装后的评分结果和请求信息
     */
    ScoringResultVO getScoringResultVO(ScoringResult scoringResult);


    /**
     * 分页获取评分结果封装
     * 本方法的目的是为了将评分结果分页展示，在前端展示时可以分批次加载数据，提高页面加载效率和用户体验。
     * 通过接收评分结果的分页对象和HTTP请求对象，实现对评分结果的分页查询和展示。
     *
     * @param scoringResultPage 评分结果的分页对象，包含了评分结果的数据和分页的相关信息
     * @return 返回一个分页对象，其中包含了评分结果的封装（ScoringResultVO），用于前端展示
     */
    Page<ScoringResultVO> getScoringResultVOPage(Page<ScoringResult> scoringResultPage);

}

